<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="MDJjT" id="MDJjT"><span data-lake-id="u315d66c1" id="u315d66c1">扩展知识</span></h1>
  <p data-lake-id="ud3e16443" id="ud3e16443"><br></p>
  <p data-lake-id="u4f08df22" id="u4f08df22"><span data-lake-id="ub0d619ad" id="ub0d619ad">定时任务，是我们经常要用的，不管是Java中内置的，还是一些框架中的。但是想要实现一个定时任务，其实底层依赖的无非就是以下几种数据结构与算法：</span></p>
  <p data-lake-id="uef7062e2" id="uef7062e2"><span data-lake-id="uc656a2b4" id="uc656a2b4">​</span><br></p>
  <p data-lake-id="u7003dffd" id="u7003dffd"><strong><span data-lake-id="u5013aa43" id="u5013aa43">1、小顶堆</span></strong><span data-lake-id="u8162b644" id="u8162b644">：我们可以使用小顶堆来管理定时事件，其中每个事件包含触发时间戳和要执行的任务信息。最紧要触发的任务一直处于堆的根部。通过小顶堆，可以高效地找到最近触发的定时事件，并在触发时执行相应的任务。</span></p>
  <p data-lake-id="uc4c78a4a" id="uc4c78a4a"><span data-lake-id="u409d11c9" id="u409d11c9">​</span><br></p>
  <p data-lake-id="u00c84e56" id="u00c84e56"><span data-lake-id="ue197f419" id="ue197f419">如Java中的Timer、DelayQueue等，都是基于小顶堆实现的。</span></p>
  <p data-lake-id="ua0a57acb" id="ua0a57acb"><span data-lake-id="u25c9b033" id="u25c9b033">​</span><br></p>
  <p data-lake-id="ub67bb4e0" id="ub67bb4e0"><br></p>
  <p data-lake-id="uca127e11" id="uca127e11"><strong><span data-lake-id="u6e841dd9" id="u6e841dd9">2、时间轮算法</span></strong><span data-lake-id="ud4e61190" id="ud4e61190">：时间轮算法是一种时间管理算法，可以高效地处理定时任务。它将时间划分成若干个时间槽，并使用循环队列来存储在每个时间槽上触发的任务，从而避免了遍历整个定时事件集合的开销。</span></p>
  <p data-lake-id="u9ad8615e" id="u9ad8615e"><span data-lake-id="u95471d5e" id="u95471d5e">​</span><br></p>
  <p data-lake-id="u63e53534" id="u63e53534"><span data-lake-id="udbbba37a" id="udbbba37a">如Netty中的HashedWheelTimer、Quartz Scheduler、Kafka中等都有时间轮算法的应用。</span></p>
  <p data-lake-id="ub4ed5a27" id="ub4ed5a27"><span data-lake-id="u5de36df1" id="u5de36df1">​</span><br></p>
  <p data-lake-id="u12856986" id="u12856986"><br></p>
  <p data-lake-id="u5ac9442a" id="u5ac9442a"><span data-lake-id="u56ae3286" id="u56ae3286">3、链表（用的比较少）：链表可以用于管理定时事件，每个节点包含触发时间戳和任务信息。链表中的节点按照触发时间戳从小到大排列，通过遍历链表，可以找到最近触发的定时事件并执行任务。</span></p>
 </body>
</html>